# author 韩佳乐
# 开发时间 2025/6/5 10:46
from lib2to3.fixes.fix_input import context

from django.shortcuts import render
from django.http import HttpResponse

from .models import *
from django.views.generic import TemplateView # 通用视图类TemplateView
from django.views.generic import ListView     # 列表视图 ListView
from django.views.generic import DetailView   # 详细视图列 DetailView

# 通用模板视图类
class TestTemplateView(TemplateView):
    #  设置模板文件
    template_name = "2/test_templateview.html"
    # 重写父类的 get_context_dataf方法
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 增加模板变量 info
        context["info"] = "该变量可以传递到模板"
        return context

# 列表视图列
class TestListView(ListView):
    model = UserBaseInfo
    template_name = "2/test_listview.html"
    # 设置模板变量的上下文
    context_object_name = "users"
    # 每页显示的条数
    paginate_by = 1
    #queryset = UserBaseInfo.objects.filter(status=1)
    # 重写父类的get_queryset方法
    def get_queryset(self):
        # 返回状态为1的数据
        userinfo = UserBaseInfo.objects.filter(status=1)
        return userinfo
    # 重写父类的get_context_data方法
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 给模板增加变量info
        context["info"] = "ListView变量可以传递到模板"
        print(context)
        return context

# 默认主键pk或者slug字段查询对象
class TestDetailView(DetailView):
    model = UserBaseInfo
    template_name = "2/test_detailview.html"
    # 设置模板变量
    context_object_name = "user"
    # 对应路由中的参数userid,默认使用主键pk或者slug字段查询对象
    pk_url_kwarg = "userid"

# 指定字段查询
class TestUsernameDetailView(DetailView):
    model = UserBaseInfo
    template_name = "2/test_detailview.html"
    context_object_name = "user"

    # 设置URL捕获的参数名称
    slug_url_kwarg = "username"
    # 指定查询的模型字段
    slug_field = "username"

    # 可选：确保只返回单个对象（需要模型字段唯一）不写下面的方法也可以根据username查询
    def get_queryset(self):
        return UserBaseInfo.objects.filter(status=1)


